---
layout: docs
page_title: migrate block in the job specification
description: |-
  Define the group's allocation migration strategy in the `migrate` block of the Nomad job specification. The migration strategy is used to control the job's behavior when it is being migrated off
  of a draining node.
---

# `migrate` block in the job specification

<Placement
  groups={[
    ['job', 'migrate'],
    ['job', 'group', 'migrate'],
  ]}
/>

The `migrate` block specifies the group's strategy for migrating allocations from
[draining][drain] nodes. If omitted, a default migration strategy is applied.
If specified at the job level, the configuration will apply to all groups
within the job. Only service jobs with a count greater than 1 support migrate
blocks.

Migrating happens when a Nomad node is drained. When a node is lost, Nomad
[replaces][] the allocations instead and ignores the `migrate` block.  When the
agent fails to set up the allocation or the tasks of an allocation more than
their [`restart`][] block allows, Nomad [reschedules][] the allocations instead
and ignores the `migrate` block.


```hcl
job "docs" {
  migrate {
    max_parallel     = 1
    health_check     = "checks"
    min_healthy_time = "10s"
    healthy_deadline = "5m"
  }
}
```

When one or more nodes are draining, only `max_parallel` allocations will be
stopped at a time. Node draining will not continue until replacement
allocations have been healthy for their `min_healthy_time` or
`healthy_deadline` is reached.

Note that a node's drain [deadline][deadline] will override the `migrate`
block for allocations on that node. The `migrate` block is for job authors to
define how their services should be migrated, while the node drain deadline is
for system operators to put hard limits on how long a drain may take.

See the [Workload Migration Guide](/nomad/docs/manage/migrate-workloads) for details
on node draining.

## Parameters

- `max_parallel` `(int: 1)` - Specifies the number of allocations that can be
  migrated at the same time. This number must be less than the total
  [`count`][count] for the group as `count - max_parallel` will be left running
  during migrations.

- `health_check` `(string: "checks")` - Specifies the mechanism in which
  allocations health is determined. The potential values are:

  - "checks" - Specifies that the allocation should be considered healthy when
    all of its tasks are running and their associated [checks][checks] are
    healthy, and unhealthy if any of the tasks fail or not all checks become
    healthy. This is a superset of "task_states" mode.

  - "task_states" - Specifies that the allocation should be considered healthy when
    all its tasks are running and unhealthy if tasks fail.

- `min_healthy_time` `(string: "10s")` - Specifies the minimum time the
  allocation must be in the healthy state before it is marked as healthy and
  unblocks further allocations from being migrated. This is specified using a
  label suffix like "30s" or "15m".

- `healthy_deadline` `(string: "5m")` - Specifies the deadline in which the
  allocation must be marked as healthy after which the allocation is
  automatically transitioned to unhealthy. This is specified using a label
  suffix like "2m" or "1h".

[checks]: /nomad/docs/job-specification/service#check
[count]: /nomad/docs/job-specification/group#count
[drain]: /nomad/commands/node/drain
[deadline]: /nomad/commands/node/drain#deadline
[replaces]: /nomad/docs/job-specification/disconnect#replace
[`restart`]: /nomad/docs/job-specification/restart
[reschedules]: /nomad/docs/job-specification/reschedule
